Использует всего две двунаправленные линии связи.
SDA Serial Data Line
SCL Serial Clock Line
На одной двупроводной шине может быть до 127 устройств. Ведущий генерирует такты, ведомый только поддакивает при приеме байта.
Есть две линии с подтяжкой к питающему U (обычно +3.3 +5).
Адресация. 7 бит, т. е. 127 адресов, 16 из которых в резерве. Остается 112 адресов для использования.
Основной режим 100 кбит/с и 10 с пониженной скоростью. Есть возможность приостановки тактирования.
Начало обмена. Ведущий формирует «старт»
При SCL = Hi, SDA Hi -> Low. Все ведомые воспринимают это как начало обмена.
При обычном обмене изменения SDA при SCL = Hi запрещены.
Передача данных
SCL = Low, на SDA выставляется первый бит (старший) байта данных.
Изменять уровни SDA можно только при SCL = Low. Не валидны.
Доверять уровню SDA можно при SCL = Hi. Валидны.
Подтверждение приема ведомым
Бит выставляется на шину SDA после приема 8 бит данных
Завершение обмена. Ведущий формирует «стоп».
При SCL = Hi, SDA Low -> Hi.
«старт» и «стоп» всегда запускает ведущий
После «старт» шина считается занятой, а после «стоп» свободной через какой то таймаут.
Передача 8 бит от передатчика к приемнику.
Сигнал успешного приема.
Передатчик формирует дополнительный (9-ый) импульс SCL.
Передатчик отпускает SDA ( = Hi) на время синхроимпульса подтверждения.
Приемник, если прием успешен, выставляет SDA = Low и удерживает пока SCL = Hi.
Подтверждение обязательно если только это не завершение передачи ведомой стороной.
Если ведомый не может подтвердить свой адрес
SDA = Hi
Ведущий видя это может выдать «стоп»
Ведущий-приемник должен сообщить об окончании неподтверждением последнего байта
Ведомый-передатчик должен освободить линию для того чтобы позволить ведущему выдать состояние стоп
Ведущий не имеет права на SCL Low -> Hi. (правило монтажного)
Ведомый может пользоваться этим когда ему нужно время на обработку принятого блока. Он удерживает SCL= Low до момента готовности приема следующего бита.
Остальные устройства будут ожидать.
Когда все это кончится наступит SCL= Hi. Все устройства будут жить в этой фазе.
Самое быстрое устройство у которого этот период закончился сделает SCL= Low
Низкий период синхросигнала — тишина.
Период SCL= Low определяется наидлиннейшим периодом синхронизации из всех устройств, SCL= Low самым коротким периодом синхронизации.
Первый байт после сигнала старт, определяет адрес ведомого с которым будет производиться обмен.
[7бит — адрес ведомого][1бит — направление]
направление: 0 — запись ведомый в ведущего 1- чтение ведомый и ведущего
Все ведомые слушают, один из ведомых опознает адрес и считает себя выбранным, он становиться ведомым-приемником или ведомым-передатчиком.
Обычно направление не меняется от СТАРТ до СТОП. Но бывают комбинированные форматы.
Все устройства должны сбрасывать логику шины при получении сигнала старт и учитывать что у ведущего нет монопольного права ни на какие линии шины.
Адрес ведомого разделен на фиксированную и программируемую часть
Фиксированная часть — это вроде типа устройства, упоминается в доках на устройство
Программируемая часть — ее нужно менять и учитывать если приборов одного типа много
Все специализированные устройства имеют набор фиксированных адресов, смотреть в описании устройства
Две группы адресов зарезервировано для специальных функций.
Адрес делится на две части «старшие биты» 4бита и «младшие биты» 3бита.
SMBus забирает поде себя первые 4бита и типизирует по таблице
v2.